package com.company.pangu.aliyun.risk.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * <p>阿里云视频检测（异步）</p >
 * https://help.aliyun.com/document_detail/70436.html?spm=a2c4g.11186623.6.689.5a234caccCfxOh
 *
 * @author Nikola Tesla
 * @version 1.0
 * @date 2021/4/6
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RiskVideoAsyncScanResultsResponse {

    /**
     * 错误码，和HTTP状态码一致。
     */
    private int code;

    /**
     * 请求信息的响应信息。
     */
    private String msg;

    private String requestId;

    private List<TaskRes> data;


    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static final class TaskRes {

        /**
         * 说明 视频流检测场景中，code返回280表示在检测中，返回200表示检测完成。在检测中状态时，检测结果中包含从开始检测到当前时间的检测到结果。
         */
        private int code;

        private String msg;

        /**
         * 检测任务的ID。
         */
        private String taskId;

        /**
         * 检测对象的URL。
         */
        private String url;

        /**
         * 返回结果。调用成功时（code=200），返回结果中包含一个或多个元素。
         */
        private List<Result> results;

        /**
         * 视频语音检测结果
         */
        private List<AudioScanResult> audioScanResults;

        /**
         * 附加属性
         */
        private Extras extras;

        @Data
        @Builder
        @NoArgsConstructor
        @AllArgsConstructor
        public static final class Extras {

            /**
             * 转存证据
             */
            private String newUrl;

        }

        @Data
        @Builder
        @NoArgsConstructor
        @AllArgsConstructor
        public static final class AudioScanResult {

            /**
             * 视频语音的检测结果分类。不同检测场景的结果分类不同，具体如下：
             * normal：正常
             * spam：包含垃圾信息
             * ad：广告
             * politics：涉政
             * terrorism：暴恐
             * abuse：辱骂
             * porn：色情
             * flood：灌水
             * contraband：违禁
             * customized：自定义（例如命中自定义关键词）
             */
            private String label;

            /**
             * 置信度分数，取值范围：0（表示置信度最低）~100（表示置信度最高）。
             * 如果suggestion为pass，则置信度越高，表示内容正常的可能性越高；如果suggestion为review或block，则置信度越高，表示内容违规的可能性越高。
             */
            private double rate;

            /**
             * 视频语音检测场景，唯一取值：antispam，表示语音反垃圾。
             */
            private String scene;

            /**
             * 建议您执行的后续操作。取值：
             * pass：结果正常，无需进行其余操作。
             * review：结果不确定，需要进行人工审核。
             * block：结果违规，建议直接删除或者限制公开。
             */
            private String suggestion;
        }

        @Data
        @Builder
        @NoArgsConstructor
        @AllArgsConstructor
        public static final class Result {

            /**
             * 视频检测结果的分类。不同检测场景的结果分类不同，具体如下：
             * 视频智能鉴黄（porn）结果分类：
             * normal：正常
             * porn：色情
             * 视频暴恐涉政（terrorism）结果分类：
             * normal：正常
             * terrorism：暴恐涉政
             * 视频不良场景（live）结果分类：
             * normal：正常
             * live：包含不良场景
             * 视频logo（logo）结果分类：
             * normal：正常
             * logo：包含logo
             * 视频图文违规（ad）结果分类：
             * normal：正常
             * ad：包含广告或文字违规信息
             */
            private String label;

            /**
             * 置信度分数，取值范围：0（表示置信度最低）~100（表示置信度最高）。
             * 如果suggestion为pass，则置信度越高，表示内容正常的可能性越高；如果suggestion为review或block，则置信度越高，表示内容违规的可能性越高。
             */
            private double rate;

            /**
             * 视频检测场景，和调用请求中的场景对应。取值：
             * porn：视频智能鉴黄。
             * terrorism：视频暴恐涉政。
             * live：视频不良场景。
             * logo：视频logo。
             * ad：视频图文违规。
             */
            private String scene;

            /**
             * 建议您执行的后续操作。取值：
             * pass：结果正常，无需进行其余操作。
             * review：结果不确定，需要进行人工审核。
             * block：结果违规，建议直接删除或者限制公开。
             */
            private String suggestion;

            /**
             * 包含违规内容的视频截帧的信息
             */
            private List<Frame> frames;
        }
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static final class Frame {

        /**
         * 视频截帧的地址。
         * 说明 若开启了视频证据转存，则返回转存的视频截帧的OSS URL链接。更多信息，请参见证据转存。
         */
        private String url;

        /**
         * 视频截帧距离片头的时间戳，单位：秒。
         */
        private Integer offset;

        /**
         * 视频截帧的检测结果分类。不同检测场景的结果分类不同，具体如下：
         * 视频智能鉴黄（porn）截帧结果分类：
         * normal：正常
         * sexy：性感
         * porn：色情
         * 视频暴恐涉政（terrorism）截帧结果分类：
         * normal：正常
         * bloody：血腥
         * explosion：爆炸烟光
         * outfit：特殊装束
         * logo：特殊标识
         * weapon：武器
         * politics：涉政
         * violence ： 打斗
         * crowd：聚众
         * parade：游行
         * carcrash：车祸现场
         * flag：旗帜
         * location：地标
         * others：其他
         * 视频图文违规（ad）截帧结果分类：
         * normal：正常
         * politics：文字含涉政内容
         * porn：文字含涉黄内容
         * abuse：文字含辱骂内容
         * terrorism：文字含暴恐内容
         * contraband：文字含违禁内容
         * spam：文字含其他垃圾内容
         * npx：牛皮癣广告
         * qrcode：包含二维码
         * programCode：包含小程序码
         * ad：其他广告
         * 说明 默认只会返回normal或者ad。如果需要其他分类结果，请提交工单联系我们进行配置。
         * 视频不良场景（live）截帧结果分类：
         * normal：正常
         * meaningless：无意义（例如黑屏、白屏）
         * PIP：画中画
         * smoking：吸烟
         * drivelive：车内直播
         * 视频logo（logo）截帧结果分类：
         * normal：正常
         * TV：包含受管控的logo
         * trademark：包含商标
         */
        private String label;

        /**
         * 置信度分数，取值范围：0~100，置信度越高表示检测结果的可信度越高。建议您不要在业务中使用该分数。
         */
        private Float rate;

    }

}
